第1周:程序设计与C语言
计算机和编程语言
编程语言就是用来描述我们要计算机如何做事情的语言。学习编程就需要了解计算机做事情(擅长)的方式方法,学会用计算机的方式来想问题,这就叫做计算思维。本节是导论,建立关于计算机工作方式和编程语言的正确概念。
计算机与编程语言:计算机怎么做事情的,编程语言是什么
计算机怎么解决问题?计算机没有像人一样的自动化理解 what to do,需要把一个任务拆成多步指令告诉它 how to do,描述步骤的手段就是程序,编程语言不是交谈而是写下计算机做事情的步骤,相比较命令更像是交谈,步骤就是算法,计算机做的所有的事情都叫做计算。
计算机的思维方式:重复是计算机最擅长的
遇到一个方程可以套公式解方程也可以一个一个数代入试,计算机擅长的就是后者——枚举,算法就是缩小枚举的范围,比如取中间值去尝试,那就可以减小一半的范围,这就是二分法。
计算机怎么去执行程序呢?计算机能看懂的是 2 进制(表示为 16 进制),所以,一种方案叫解释,用一个能读懂的程序读了后命令计算机执行,另一种是编译,用一个的翻译的程序翻译一份给计算机让它读、执行,计算机读、执行的是翻译后的新文件。语言本身是没有解释和编译的区分的啊,任何一种语言既可以解释执行也可以编译执行,只是这种语言常用的程序的执行方式。比如 C 是编译型也可以用解释器。解释型可能可以在运行中修改等等,过去也称解释型的语言运行慢不过现在运行效率不是重要的问题了。编译型有确定的运算性能。总之区别没那么大。
C 语言
C 语言在嵌入式无可替代,2024 年 TIOBE 的编程语言排名前三为 Python、C++、C,C 语言随着 Unix 诞生,50 多年前诞生的 C 语言只有所谓标准而不像现在的编程语言由一家管理、统一,每个实现C语言编译器和运行库的厂家都在往里面加入自己的方言。课程教学用的 C99 标准。
为什么是C:C语言在工业界有重要地位,在很多领域无可替代
C 语言在工业使用广泛,有的领域无可替代,值得我们研究一下,C 语言后的现代编程语言大多有参考 C 因此语法和 C 区别不大。某种语言的厉害,往往是由于这个语言别人为他写的库,针对某种应用的库能实现一个调用解决其他语言处理起来非常困难的事情,除了库还有传统,通常这种问题用这种语言来解决,那这种语言解决的方案就越多也就越用,相互促成。所以用 C 语言来做教学,另外其实语言之间的差异很小,当你学会了一种编程语言以后上手其他语言 easy,C 刚好在一个基础的位置上。
简单历史:关于C语言和版本的极其简单的历史
一般称 C 语言发布于 1972 年,不过因为和 Unix 息息相关(Unix 开发始于 1969),也称为 it was the summer of 69。
FORTRAN(人类历史上第一个高级程序设计语言 1950)->BCPL->B->C,BCPL 和 B 都支持指针间接方式,所以 C 也支持,指针是 C 的灵魂。同时受到 PL/1 的影响,PL/1 是一种非常重要的底层编程语言或者叫做系统编程语言,它主要是和汇编语言非常接近和机器语言非常接近,所以它可以用来做一些像操作系统这样的一些基础的程序,C 语言也立志去充分的表达这个计算机所使用的那种机器指令,所以在高级语言当中 C 语言显得是一种比较底层的语言。
1973 年 3 月份,在第三版的 Unix 上面第一次出现了 C 语言的编译器,然后在 1973 年的 11 月,第四版的 Unix(System Four)用 C 语言重写了,先鸡后蛋了。
1978 年,丹尼斯·里奇和布莱恩·柯林汉合作出版了C程序设计语言的第一版。书中的 C 语言标准被称为 K&R C,两位作者的姓首字母。
1989 年 ANSI 发布了 ANSI C
1990 年 ISO 接受了 ANSI 的标准,C89
1995 年和 1999 年更新了 C95 和 C99,如今即将推出 C24,C99 里变量可以任意地方定义,变量可以有 const 修饰符表示不可被修改,现在的编译器都支持 C99 了,所以课程基于 C99 而不是 ANSI C。
编程软件:C语言的编程软件选择太多,我们推荐DevC++
- % 这个课程是 C 语言程序设计的课,B 站把第0周:里的几个弄混乱了。
C 语言是一种工业语言,是在做那些非常底层的工作的人在用 C,开发的效率要远远大于学习是否容易等考量。日常应用很少直接用 C 语言,学习 C 语言的过程也主要是去写一些练习的代码而不是去写真实的软件,同时学习过程也不会有其他语言那么愉快。
C 语言需要被编译才能运行,所以需要编辑器用来编辑代码和编译器用来把代码转为计算机能读懂的东西,或者集成二者的 IDE。如有需要还可加个调试用的调试器。macOS 上用的是 LLVM 而不是 GCC,还有轻量级开发工具,好看的编辑器加外部的编译器(MinGW),甚至一些文本编辑器都能调用编译器。
第一个程序
程序设计是实践性很强的学科,光是看书、听课是无法学会的,一定要自己动手写程序。实在不行可以找找在线环境。
Windows安装编程软件
当下的新语言,往往标准和开发环境掌握在比较少的团体中,没的挑的好处是统一。而 C 语言的年代,语言规范一公布,谁都可以来做编译器,加入自己的想法,造成了很多方言。课程推荐 Dev-C++,下载安装全默认,启动选择中文界面。
第一个C程序:如何在DevC++中编辑、编译和运行程序
不要使用中文输入法!切记切记!
后缀.c 为 C 语言,.cpp 为 C++。
现代编辑器提供了大量的智能编辑功能,比如 match brackets 和 auto closing delete,Parameter Hints
保存后编译
.c .cpp 区别
编译、运行、编译运行
编译结果,可执行文件,一次编译多次运行
终端输出
程序框架,头文件、主函数、返回
printf 字符串 输出
/n 转义字符
C 语言分号结尾,可以随意换行
有错误提示参考,但不够聪明
英文英文,一个中文两个字符
关于那个0
编程友好字体,1、l、l、I、0、O VS. 1、l、l、I、0、O ,早期需要手写程序为了区分的设计,斜线或点
MacOS安装编程软件
MacOS X如何在命令行编辑、编译和运行C程序
sublime text 文本编辑器,但是它可以调用编译器。它不能输入。
编译 gcc hello.c
默认 a.out,看着是文档类型但是可以执行
Unix 运行当前目录程序需要 ./
vi i :wq
做点计算:如何让程序输出算术结果
格式化输出 %d,计算符号也有编程版 / *,取余 %
关于 gcc
最初的 Unix 自带 C 语言编译器 cc(C compiler),90 年代 GNU 做了一个 gcc,gcc 打败了 cc。DOS 上有 mscc,后来的 Windows 的 VC。
gcc 怎么跑在 Windows?操作系统 api 问题,library 库函数移植。
sygwin 用 Unix 的 library 编译为在 Windows 上运行的 Unix 程序,实际是 Unix 程序
MinGW minimal GNU for Windows ,win library
学习来说区别不大,实际工作中可能是交叉编译,在 Win 上编译,在单片机上跑,MinGW 停更多年,MinGW 32、MinGW 64
tdm-gcc 和 MinGW 逻辑一样
clang LLVM
Windows安装TDM-GCC
Difference Between 32-Bit and 64-Bit
Environment Variable
安装VisualStudioCode
一个独立的编辑器,5. Computer/2. Productivity Toolkit/Development/VS Code
VSCode的工作区
多个文件管理,workspace 工作区,open folder,自动添加了 .vscode 文件夹,这个打开的文件夹就是工作区了
文件直接拷贝到文件夹会识别的,
run 只能单文件,如果有其他文件的函数,
命令行 gcc 连着一起编译,Windows 也需要 ./ 执行当前目录
Makefile make? mingw32-make! 可以别名